package com.alili_tv.system.common;

import lombok.Getter;
import lombok.Setter;

import java.io.Serial;
import java.io.Serializable;

/**
 * 响应结果集：
 * code为0时表示响应成功，其他均错误
 * 封装结果级时请使用其方法：success，error
 */
@Getter
@Setter
public class R<T> implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 状态码
     * 0成功
     * 1失败
     * 2未登录：提示登录
     * 3不做处理
     */
    private Integer code; // 编码：

    private T data; //数据

    private String message; //错误信息

    /**
     * 成功并提示(当类型为string时才提示)
     * @param data
     * @return
     * @param <T>
     */
    public static <T> R<T> success(T data) {
        R<T> r = new R<>();
        r.data = data;
        r.code = 0;
        return r;
    }

    /**
     * 失败并提示
     * @param message
     * @return
     * @param <T>
     */
    public static <T> R<T> error(String message) {
        R<T> r = new R<>();
        r.message = message;
        r.code = 1;
        return r;
    }

    /**
     * 未登录并提示登录
     * @param message
     * @return
     * @param <T>
     */
    public static <T> R<T> login(String message) {
        R<T> r = new R<>();
        r.message = message;
        r.code = 2;
        return r;
    }

    /**
     * 不做处理
     * @return
     * @param <T>
     */
    public static <T> R<T> common() {
        R<T> r = new R<>();
        r.code = 3;
        return r;
    }
}
